<?php
// ----------------------------------------------------------------------
// pn-commerce Shopping Cart Solution for PostNuke
// http://pncommerce.de
// http://www.sourceforge.net/projects/pn-commerce/
//
// It is based on PostKart 0.701QA from
//			Destin LeBlanc [ postkart@zenflesh.com ]
// ----------------------------------------------------------------------
// Source file:  $Source: /cvsroot/pn-commerce/pn-commerce/pnpmdebitapi.php,v $
//
// Last changes from:  $Author: landseer $
//
// Revision:           $Revision: 1.29 $
//
// Date of revision    $Date: 2004/09/12 11:17:13 $
//  
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------

require_once("modules/pncommerce/common.php");

/**
 * load the config array and return it
 * no arguments needed
 */
function pncommerce_pmdebitapi_getConfig ($args=array())
{
  $data=pnModGetVar ('pncommerce', 'pmdebitData');
  if(isset($data)) return unserialize($data);
  else return false;
}

/**
 * save the config array
 * @param $args array of config values
 */
function pncommerce_pmdebitapi_setConfig ($args)
{
  pnModSetVar ('pncommerce', 'pmdebitData',serialize($args));
}


/**
 * This function is used during the checkout process
 * it's called after the checkout where the user agrees to
 * buy the items, so you can do the rest here to finish the
 * payment process if possible. otherwise just redirect to the next step
 * called processshippingfinal
 * don't forget to bypass all important informations 
 * like ON,KID,maxStep
 * it's important when the user jumps back to earlier steps
 *
 * @param $args['KID'] string CustomerID
 * @param $args['ON']  string ordernumber
 */
function pncommerce_pmdebitapi_processpayment ($args)
{ 
	pnRedirect( pnModURL( 'pncommerce', 'user', 'processshippingfinal' ) );
	return true;
}

/**
 * This function is used during the checkout process
 * you can let the user provide special information
 * you need for further processing
 * when you don't need any info just redirect the user to
 * getshippingmethod in the pnuser.php
 * don't forget to bypass all important informations 
 * like BPM,BSM,KID,maxStep
 * it's important when the user jumps back to earlier steps
 */
function pncommerce_pmdebitapi_getdata ($args)
{
	extract ($args);
	if (!pnModAPILoad('pncommerce', 'user'))
	{
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
	}

    $smarty =& new pnRender();
    $smarty->caching = false;
    $smarty->assign( 'user', unserialize( pnSessionGetVar( 'PNCUserData' ) ) );
    return $smarty->fetch( 'pncommerce_pmdebit_getdata.html' );
}

/**
 * This function is used during the checkout process
 * you can save the provide information here
 * getshippingmethod in the pnuser.php
 * don't forget to bypass all important informations 
 * like BPM,BSM,KID,maxStep
 * it's important when the user jumps back to earlier steps
 * 
 * It's important to redirect to getshippingmethod if everything was ok here
 *
 * @param $args['KID'] string CustomerID
 * @param $args['BPM'] string selected Paymethod
 * @param $args['BSM'] string selected Shippingmethod
 * @param $args['maxStep'] int highest Step the user reached in this checkout process
 */
function pncommerce_pmdebitapi_getdataresponse($args)
{
	$user = unserialize( pnSessionGetVar( 'PNCUserData' ) );
	list( $user['PayMethodData']['DEBOwner'],
	      $user['PayMethodData']['DEBNum'],
	      $user['PayMethodData']['DEBBCN'] ) = pnVarCleanFromInput( 'DEBOwner', 'DEBNum', 'DEBBCN' );
	if ( $user['PayMethodData']['DEBOwner'] == "" )
	{
		$errormsg[] = ""._PNC_YOUFORGOT." "._PNC_DEBOWNERCAPS.". "._PNC_PLEASEGOBACK;
	}
	if ( $user['PayMethodData']['DEBNum'] == "" )
	{
		$errormsg[] = ""._PNC_YOUFORGOT." "._PNC_DEBNUMCAPS.". "._PNC_PLEASEGOBACK;
	}
	if ( $user['PayMethodData']['DEBBCN'] == "" )
	{
		$errormsg[] = ""._PNC_YOUFORGOT." "._PNC_DEBBCNCAPS.". "._PNC_PLEASEGOBACK;
	}
	if ( count( $errormsg ) > 0 )
	{
        $smarty = new pnRender();
        $smarty->caching = false;
        $smarty->assign( 'errormsg', $errormsg );
        $smarty->assign( 'user', $user );
        return $smarty->fetch( 'pncommerce_pmdebit_getdataresponse.html' );
	}
	else
	{
		// save the data to the db table users
		pncommerce_pmdebitapi_userinsert (array ('user' => $user ) );
		pnSessionSetVar( 'PNCUserData', serialize( $user ) );
	}
	pnRedirect ( pnModURL ( 'pncommerce', 'user', 'getshippingmethod' ) );	
}

function pncommerce_pmdebitapi_userinsert ($args)
// $user
{
    extract( $args );
	$user['PayMethodData']['DEBBCN'] = ereg_replace(" ", "", $user['PayMethodData']['DEBBCN']);
	$user['PayMethodData']['DEBNum'] = ereg_replace(" ", "", $user['PayMethodData']['DEBNum']);
	if (!pnModAPILoad('pncommerce', 'user'))
	{
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
	}
	pnModAPIFunc ('pncommerce', 'user', 'executesqlDB', array('sql' => "UPDATE ".pnConfigGetVar('prefix')."_pncommerce_users SET PayMethodData='".serialize( $user['PayMethodData'] )."' WHERE UserName='".pnVarPrepForStore($args['KID'])."' "));
}

function pncommerce_pmdebitapi_order($args)
// $ON, $KID
{

	extract ($args);
	if (!pnModAPILoad('pncommerce', 'user'))
	{
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
	}

	$result=pnModAPIFunc ('pncommerce', 'user', 'readfromDB',
									array('table' => 'users',
										'fields' => array('PayMethodData'),
										'required' => array('UserName', $KID)));
	if($result!=false){							
		$data=$result[0];
		pnModAPIFunc ('pncommerce', 'user', 'executesqlDB', array('sql' => "UPDATE ".pnConfigGetVar('prefix')."_pncommerce_orders SET PayMethodData='".pnVarPrepForStore($data)."' WHERE OrderNumber='".(int)$ON."'"));
	}
	else{
      	pnSessionSetVar('errormsg', _PNC_NODATA);
	}
}

function pncommerce_pmdebitapi_configintro ($args)
{
	$Mode = pnVarCleanFromInput ('Mode');

	if (!pnModAPILoad('pncommerce', 'user'))
      {
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
      }

	if (pnSecAuthAction(0, '::', '::', ACCESS_ADMIN))
	{
	    switch ($Mode)
	    {
	    case 'install':
	    	$default=array('PMCalcFunc'=>'PMCFlat',
	    		            'PMCFlatPrice' => '0');
	    	pncommerce_pmdebitapi_setConfig($default);
	    	pnModSetVar ('pncommerce', 'pmdebit', 'on');
	    	break;
	    case 'remove':
	    	pncommerce_pmdebitapi_quietremove();
	    	break;
	    case 'activate':
	    	pnModSetVar ('pncommerce', 'pmdebit', 'on');
	    	break;
	    case 'deactivate':
	    	pnModSetVar ('pncommerce', 'pmdebit', 'off');
	    	break;
	    default:
	    	break;
	    }
       	pnRedirect( pnModAPIFunc('pncommerce','user','pncModURL',
								array('Module'=>'pncommerce', 'Section'=> 'admin', 'Function'=>'paymethodconfig')));
        return true;
    }
	else
	{
		return showerrorpage( _PNC_NOAUTH, __FILE__, __LINE__ );
	}
}

function pncommerce_pmdebitapi_showoption($args)
{
	extract ($args);
	$temp ="<input type='radio' name='PayMethod' value='pmdebit'";
	if ( $BPM == 'pmdebit' )
	{
		$temp .= " checked ";
	}
	$temp .= ">"._PNC_DEBORDER."<br>";
	return $temp;
}

function pncommerce_pmdebitapi_info ()
{
	return (_PNC_DEBORDER);
}

function pncommerce_pmdebitapi_footermsg ($args)
// $ON or $KID, but never both at the same time !!!
// only $ON  : we already have an order and read the fields from there
// only $KID : we don't have an order yet and read from the users table
{
	extract ($args);
	if (!pnModAPILoad('pncommerce', 'user'))
	{
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
	}

    $user = unserialize( pnSessionGetVar( 'PNCUserData' ) );
	$cr = "<br>";
	$temp = ""._PNC_DEBORDER.$cr;
	$temp = $temp._PNC_WEWILLSHIPUPONDEBITAPPROVAL.$cr;
	$temp = $temp._PNC_DEBOWNER.": ".$user['PayMethodData']['DEBOwner'].$cr;
	$temp = $temp._PNC_DEBNUM.": ".$user['PayMethodData']['DEBNum'].$cr;
	$temp = $temp._PNC_DEBBCN.": ".$user['PayMethodData']['DEBBCN'].$cr;
	$temp = $temp._PNC_DEBFINALCOMMENT.$cr;
	return $temp;
}

function pncommerce_pmdebitapi_quietremove ()
{
	pnModDelVar ('pncommerce', 'pmdebit');
	pnModDelVar ('pncommerce', 'pmdebitData');
}

/**
 * This function is used during the checkout process
 * You can calculate a fee for the selected paymethod here
 *
 * @param $args['SubTotal'] Double the total costs with shipping included
 * @return double 
 * @returns the fee for this paymethod
 */
function pncommerce_pmdebitapi_getPaymethodTotal($args)
{
//Return 0 = this Paymethod is for free
	if (!pnModAPILoad('pncommerce', 'user'))
      {
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
      }
	$config=pncommerce_pmdebitapi_getConfig();
	//add value to array to make the function able to calculate the fee
	$config['Value']=$args['SubTotal'];
	return pnModAPIFunc('pncommerce','user','getPMCalcValue',$config);
}

/**
 * Asks for special data for this paymethod, for example minimum fee or default fee, ...
 * Account numbers, ...
 * ****
 * You have to redirect to 'paymethodconfig' when you're done
 * ****
 * @return String 
 * @returns the config page for this paymethod
 */
function pncommerce_pmdebitapi_config()
{
	if (!pnModAPILoad('pncommerce', 'admin'))
      {
        return showerrorpage("unable to load pnadminapi", __FILE__, __LINE__);
      }
	if (!pnModAPILoad('pncommerce', 'user'))
      {
        return showerrorpage("unable to load pnuserapi", __FILE__, __LINE__);
      }
	if (pnSecAuthAction(0, '::', '::', ACCESS_ADMIN))
	{
	    $Submit = pnVarCleanFromInput( 'Submit' );
	    if( !$Submit )
	    {
	        $smarty = new pnRender();
            $smarty->caching = false;
	        $smarty->assign( 'config', pncommerce_pmdebitapi_getConfig() );
	        return $smarty->fetch( 'pncommerce_pmdebit_configuration.html' );
	    }
	    else  // submit is set
	    {
    
    if( !pnSecConfirmAuthKey() ) 
    { 
        return showerrorpage( _PNC_BADAUTHKEY, __FILE__, __LINE__ ); 
    }     
    
    		$storage=array();
    		$storage['PMCalcFunc'] = pnVarCleanFromInput('PMCalcFunc');
    		$storage=pnModAPIFunc('pncommerce','user','gatherPMCalcData',$storage);
    		pncommerce_pmdebitapi_setConfig($storage);
    		pnRedirect( pnModAPIFunc('pncommerce','user','pncModURL',
    									array('Module'=>'pncommerce', 'Section'=> 'admin', 'Function'=>'paymethodconfig')));
    		return true; 
	    }
    }
	return false;
}

?>
